home *** CD-ROM | disk | FTP | other *** search
/ Graphics Plus / Graphics Plus.iso / general / fractal / kaos.lha / complib / map_forward.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-01-21  |  1.4 KB  |  61 lines

  1. /*
  2. ### forward mapping ###
  3. Compute i_max orbits (x(1),...,x(i_max)). NOte that x(0) is displayed
  4. but not recorded.
  5.  
  6. Bug: No polar coords allowed for maps at the moment
  7. */
  8.  
  9. int
  10. map_forward()
  11. {
  12.     int i,iter,color;
  13.     double time,*vn2,*vn,*vfull,*dvector();
  14.     void free_dvector();
  15.     extern int var_dim,func_dim,param_dim,full_dim;
  16.     extern int forward_toggle,stop,var_dim,model,i_max,polar_coord;
  17.     extern double cutoff,*win_var_i,*win_var_f,*param;
  18.     extern int (*f_p)();
  19.  
  20.     
  21.     stop=0;
  22.     vn = dvector(0,var_dim-1);
  23.     vn2 = dvector(0,var_dim-1);
  24.     vfull = dvector(0,full_dim-1);
  25.  
  26.     /* initialize from window variable */
  27.     from_window_variables(vn,win_var_i,polar_coord);
  28.     
  29.     /* draw starting point not record */
  30.     to_full_variables(vfull,vn,polar_coord);
  31.     (void) draw_record_orbit(vfull,0,0);
  32.  
  33.     /* main loop */
  34.     for (iter=1;iter<=i_max;iter++){
  35.         /* check divergence */
  36.         for(i=0;i<var_dim;i++) {
  37.             if(vn[i] > cutoff || vn[i] < -cutoff) {
  38.                 system_mess_proc(1,"Orbits appear to diverge off to an infinity! Stop!");
  39.                 goto done;
  40.             }
  41.         }
  42.         (int) f_p(vn2,forward_toggle,vn,param,time,var_dim);
  43.         to_full_variables(vfull,vn2,polar_coord);
  44.         (void) draw_record_orbit(vfull,iter,1);
  45.         for(i=0;i<var_dim;i++)
  46.             vn[i] = vfull[i];
  47.         if(stop ) {
  48.             goto done;
  49.         }
  50.     }
  51.     
  52.     done:
  53.     /* to window variable */
  54.     for(i=0;i<var_dim;i++)
  55.         win_var_f[i]=vn[i];
  56.     free_dvector(vn,0,var_dim-1);
  57.     free_dvector(vn2,0,var_dim-1);
  58.     free_dvector(vfull,0,full_dim-1);
  59.     return(iter);
  60. }
  61.